## API Report File for "@backstage/plugin-catalog-react"

> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).

```ts
/// <reference types="react" />

import { ApiRef } from '@backstage/core-plugin-api';
import { CATALOG_FILTER_EXISTS } from '@backstage/catalog-client';
import { CatalogApi } from '@backstage/catalog-client';
import { ComponentEntity } from '@backstage/catalog-model';
import { ComponentProps } from 'react';
import { CompoundEntityRef } from '@backstage/catalog-model';
import { Entity } from '@backstage/catalog-model';
import { IconButton } from '@material-ui/core';
import { IconComponent } from '@backstage/core-plugin-api';
import { InfoCardVariants } from '@backstage/core-components';
import { LinkProps } from '@backstage/core-components';
import { Observable } from '@backstage/types';
import { Overrides } from '@material-ui/core/styles/overrides';
import { PropsWithChildren } from 'react';
import { default as React_2 } from 'react';
import { ReactNode } from 'react';
import { RouteRef } from '@backstage/core-plugin-api';
import { scmIntegrationsApiRef } from '@backstage/integration-react';
import { StyleRules } from '@material-ui/core/styles/withStyles';
import { SystemEntity } from '@backstage/catalog-model';
import { TableColumn } from '@backstage/core-components';
import { TableOptions } from '@backstage/core-components';
import { TextFieldProps } from '@material-ui/core';

// @public (undocumented)
export type AllowedEntityFilters<T extends DefaultEntityFilters> = {
  [K in keyof T]-?: NonNullable<T[K]> extends EntityFilter & {
    values: string[];
  }
    ? K
    : never;
}[keyof T];

// @public
export const AsyncEntityProvider: (
  props: AsyncEntityProviderProps,
) => React_2.JSX.Element;

// @public
export interface AsyncEntityProviderProps {
  // (undocumented)
  children: ReactNode;
  // (undocumented)
  entity?: Entity;
  // (undocumented)
  error?: Error;
  // (undocumented)
  loading: boolean;
  // (undocumented)
  refresh?: VoidFunction;
}

// @public (undocumented)
export type BackstageOverrides = Overrides & {
  [Name in keyof CatalogReactComponentsNameToClassKey]?: Partial<
    StyleRules<CatalogReactComponentsNameToClassKey[Name]>
  >;
};

export { CATALOG_FILTER_EXISTS };

export { CatalogApi };

// @public
export const catalogApiRef: ApiRef<CatalogApi>;

// @public (undocumented)
export const CatalogFilterLayout: {
  (props: { children: React_2.ReactNode }): React_2.JSX.Element;
  Filters: (props: {
    children: React_2.ReactNode;
    options?: {
      drawerBreakpoint?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | number;
      drawerAnchor?: 'left' | 'right' | 'top' | 'bottom';
    };
  }) => React_2.JSX.Element;
  Content: (props: { children: React_2.ReactNode }) => React_2.JSX.Element;
};

// @public (undocumented)
export type CatalogReactComponentsNameToClassKey = {
  CatalogReactUserListPicker: CatalogReactUserListPickerClassKey;
  CatalogReactEntityDisplayName: CatalogReactEntityDisplayNameClassKey;
  CatalogReactEntityLifecyclePicker: CatalogReactEntityLifecyclePickerClassKey;
  CatalogReactEntitySearchBar: CatalogReactEntitySearchBarClassKey;
  CatalogReactEntityTagPicker: CatalogReactEntityTagPickerClassKey;
  CatalogReactEntityOwnerPicker: CatalogReactEntityOwnerPickerClassKey;
  CatalogReactEntityProcessingStatusPicker: CatalogReactEntityProcessingStatusPickerClassKey;
};

// @public
export type CatalogReactEntityDisplayNameClassKey = 'root' | 'icon';

// @public (undocumented)
export type CatalogReactEntityLifecyclePickerClassKey = 'input';

// @public (undocumented)
export type CatalogReactEntityNamespacePickerClassKey = 'input';

// @public (undocumented)
export type CatalogReactEntityOwnerPickerClassKey = 'input';

// @public (undocumented)
export type CatalogReactEntityProcessingStatusPickerClassKey = 'input';

// @public (undocumented)
export type CatalogReactEntitySearchBarClassKey = 'searchToolbar' | 'input';

// @public (undocumented)
export type CatalogReactEntityTagPickerClassKey = 'input';

// @public (undocumented)
export type CatalogReactUserListPickerClassKey =
  | 'root'
  | 'title'
  | 'listIcon'
  | 'menuItem'
  | 'groupWrapper';

// @public (undocumented)
export const columnFactories: Readonly<{
  createEntityRefColumn<T extends Entity>(options: {
    defaultKind?: string;
  }): TableColumn<T>;
  createEntityRelationColumn<T_1 extends Entity>(options: {
    title: string;
    relation: string;
    defaultKind?: string;
    filter?: {
      kind: string;
    };
  }): TableColumn<T_1>;
  createOwnerColumn<T_2 extends Entity>(): TableColumn<T_2>;
  createDomainColumn<T_3 extends Entity>(): TableColumn<T_3>;
  createSystemColumn<T_4 extends Entity>(): TableColumn<T_4>;
  createMetadataDescriptionColumn<T_5 extends Entity>(): TableColumn<T_5>;
  createSpecLifecycleColumn<T_6 extends Entity>(): TableColumn<T_6>;
  createSpecTypeColumn<T_7 extends Entity>(): TableColumn<T_7>;
}>;

// @public (undocumented)
export type DefaultEntityFilters = {
  kind?: EntityKindFilter;
  type?: EntityTypeFilter;
  user?: UserListFilter | EntityUserFilter;
  owners?: EntityOwnerFilter;
  lifecycles?: EntityLifecycleFilter;
  tags?: EntityTagFilter;
  text?: EntityTextFilter;
  orphan?: EntityOrphanFilter;
  error?: EntityErrorFilter;
  namespace?: EntityNamespaceFilter;
};

// @public
export function defaultEntityPresentation(
  entityOrRef: Entity | CompoundEntityRef | string,
  context?: {
    defaultKind?: string;
    defaultNamespace?: string;
  },
): EntityRefPresentationSnapshot;

// @public (undocumented)
export function EntityAutocompletePicker<
  T extends DefaultEntityFilters = DefaultEntityFilters,
  Name extends AllowedEntityFilters<T> = AllowedEntityFilters<T>,
>(props: EntityAutocompletePickerProps<T, Name>): React_2.JSX.Element | null;

// @public (undocumented)
export type EntityAutocompletePickerProps<
  T extends DefaultEntityFilters = DefaultEntityFilters,
  Name extends AllowedEntityFilters<T> = AllowedEntityFilters<T>,
> = {
  label: string;
  name: Name;
  path: string;
  showCounts?: boolean;
  Filter: {
    new (values: string[]): NonNullable<T[Name]>;
  };
  InputProps?: TextFieldProps;
  initialSelectedOptions?: string[];
};

// @public
export const EntityDisplayName: (props: EntityDisplayNameProps) => JSX.Element;

// @public
export type EntityDisplayNameProps = {
  entityRef: Entity | CompoundEntityRef | string;
  hideIcon?: boolean;
  disableTooltip?: boolean;
  defaultKind?: string;
  defaultNamespace?: string;
};

// @public
export class EntityErrorFilter implements EntityFilter {
  constructor(value: boolean);
  // (undocumented)
  filterEntity(entity: Entity): boolean;
  // (undocumented)
  readonly value: boolean;
}

// @public (undocumented)
export type EntityFilter = {
  getCatalogFilters?: () => Record<
    string,
    string | symbol | (string | symbol)[]
  >;
  filterEntity?: (entity: Entity) => boolean;
  toQueryValue?: () => string | string[];
};

// @public
export class EntityKindFilter implements EntityFilter {
  constructor(value: string);
  // (undocumented)
  getCatalogFilters(): Record<string, string | string[]>;
  // (undocumented)
  toQueryValue(): string;
  // (undocumented)
  readonly value: string;
}

// @public (undocumented)
export const EntityKindPicker: (
  props: EntityKindPickerProps,
) => React_2.JSX.Element | null;

// @public
export interface EntityKindPickerProps {
  allowedKinds?: string[];
  // (undocumented)
  hidden?: boolean;
  // (undocumented)
  initialFilter?: string;
}

// @public
export class EntityLifecycleFilter implements EntityFilter {
  constructor(values: string[]);
  // (undocumented)
  filterEntity(entity: Entity): boolean;
  // (undocumented)
  getCatalogFilters(): Record<string, string | string[]>;
  // (undocumented)
  toQueryValue(): string[];
  // (undocumented)
  readonly values: string[];
}

// @public (undocumented)
export const EntityLifecyclePicker: (props: {
  initialFilter?: string[];
}) => React_2.JSX.Element;

// @public
export const EntityListContext: React_2.Context<
  EntityListContextProps<any> | undefined
>;

// @public (undocumented)
export type EntityListContextProps<
  EntityFilters extends DefaultEntityFilters = DefaultEntityFilters,
> = {
  filters: EntityFilters;
  entities: Entity[];
  backendEntities: Entity[];
  updateFilters: (
    filters:
      | Partial<EntityFilters>
      | ((prevFilters: EntityFilters) => Partial<EntityFilters>),
  ) => void;
  queryParameters: Partial<Record<keyof EntityFilters, string | string[]>>;
  loading: boolean;
  error?: Error;
  pageInfo?: {
    next?: () => void;
    prev?: () => void;
  };
};

// @public
export const EntityListProvider: <EntityFilters extends DefaultEntityFilters>(
  props: EntityListProviderProps,
) => React_2.JSX.Element;

// @public (undocumented)
export type EntityListProviderProps = PropsWithChildren<{
  pagination?:
    | boolean
    | {
        limit?: number;
      };
}>;

// @public (undocumented)
export type EntityLoadingStatus<TEntity extends Entity = Entity> = {
  entity?: TEntity;
  loading: boolean;
  error?: Error;
  refresh?: VoidFunction;
};

// @public
export class EntityNamespaceFilter implements EntityFilter {
  constructor(values: string[]);
  // (undocumented)
  filterEntity(entity: Entity): boolean;
  // (undocumented)
  getCatalogFilters(): Record<string, string | string[]>;
  // (undocumented)
  toQueryValue(): string[];
  // (undocumented)
  readonly values: string[];
}

// @public (undocumented)
export const EntityNamespacePicker: () => React_2.JSX.Element;

// @public
export class EntityOrphanFilter implements EntityFilter {
  constructor(value: boolean);
  // (undocumented)
  filterEntity(entity: Entity): boolean;
  // (undocumented)
  getCatalogFilters(): Record<string, string | string[]>;
  // (undocumented)
  readonly value: boolean;
}

// @public
export class EntityOwnerFilter implements EntityFilter {
  constructor(values: string[]);
  // (undocumented)
  filterEntity(entity: Entity): boolean;
  // (undocumented)
  getCatalogFilters(): Record<string, string | string[]>;
  toQueryValue(): string[];
  // (undocumented)
  readonly values: string[];
}

// @public (undocumented)
export const EntityOwnerPicker: (
  props?: EntityOwnerPickerProps,
) => React_2.JSX.Element | null;

// @public (undocumented)
export type EntityOwnerPickerProps = {
  mode?: 'owners-only' | 'all';
};

// @public
export const EntityPeekAheadPopover: (
  props: EntityPeekAheadPopoverProps,
) => React_2.JSX.Element;

// @public
export type EntityPeekAheadPopoverProps = PropsWithChildren<{
  entityRef: string;
  delayTime?: number;
}>;

// @public
export interface EntityPresentationApi {
  forEntity(
    entityOrRef: Entity | string,
    context?: {
      defaultKind?: string;
      defaultNamespace?: string;
    },
  ): EntityRefPresentation;
}

// @public
export const entityPresentationApiRef: ApiRef<EntityPresentationApi>;

// @public (undocumented)
export const EntityProcessingStatusPicker: () => React_2.JSX.Element;

// @public
export const EntityProvider: (
  props: EntityProviderProps,
) => React_2.JSX.Element;

// @public
export interface EntityProviderProps {
  // (undocumented)
  children: ReactNode;
  // (undocumented)
  entity?: Entity;
}

// @public
export const EntityRefLink: (props: EntityRefLinkProps) => JSX.Element;

// @public
export type EntityRefLinkProps = {
  entityRef: Entity | CompoundEntityRef | string;
  defaultKind?: string;
  defaultNamespace?: string;
  title?: string;
  children?: React_2.ReactNode;
  hideIcon?: boolean;
} & Omit<LinkProps, 'to'>;

// @public
export function EntityRefLinks<
  TRef extends string | CompoundEntityRef | Entity,
>(props: EntityRefLinksProps<TRef>): React_2.JSX.Element;

// @public
export type EntityRefLinksProps<
  TRef extends string | CompoundEntityRef | Entity,
> = {
  defaultKind?: string;
  entityRefs: TRef[];
  hideIcons?: boolean;
  fetchEntities?: boolean;
  getTitle?(entity: TRef): string | undefined;
} & Omit<LinkProps, 'to'>;

// @public
export interface EntityRefPresentation {
  snapshot: EntityRefPresentationSnapshot;
  update$?: Observable<EntityRefPresentationSnapshot>;
}

// @public
export interface EntityRefPresentationSnapshot {
  entityRef: string;
  Icon?: IconComponent | undefined | false;
  primaryTitle: string;
  secondaryTitle?: string;
}

// @public
export function entityRouteParams(entity: Entity): {
  readonly kind: string;
  readonly namespace: string;
  readonly name: string;
};

// @public
export const entityRouteRef: RouteRef<{
  name: string;
  kind: string;
  namespace: string;
}>;

// @public
export const EntitySearchBar: () => React_2.JSX.Element;

// @public (undocumented)
export type EntitySourceLocation = {
  locationTargetUrl: string;
  integrationType?: string;
};

// @public
export const EntityTable: {
  <T extends Entity>(props: EntityTableProps<T>): React_2.JSX.Element;
  columns: Readonly<{
    createEntityRefColumn<T_1 extends Entity>(options: {
      defaultKind?: string | undefined;
    }): TableColumn<T_1>;
    createEntityRelationColumn<T_2 extends Entity>(options: {
      title: string;
      relation: string;
      defaultKind?: string | undefined;
      filter?:
        | {
            kind: string;
          }
        | undefined;
    }): TableColumn<T_2>;
    createOwnerColumn<T_3 extends Entity>(): TableColumn<T_3>;
    createDomainColumn<T_4 extends Entity>(): TableColumn<T_4>;
    createSystemColumn<T_5 extends Entity>(): TableColumn<T_5>;
    createMetadataDescriptionColumn<T_6 extends Entity>(): TableColumn<T_6>;
    createSpecLifecycleColumn<T_7 extends Entity>(): TableColumn<T_7>;
    createSpecTypeColumn<T_8 extends Entity>(): TableColumn<T_8>;
  }>;
  systemEntityColumns: TableColumn<SystemEntity>[];
  componentEntityColumns: TableColumn<ComponentEntity>[];
};

// @public
export interface EntityTableProps<T extends Entity> {
  // (undocumented)
  columns: TableColumn<T>[];
  // (undocumented)
  emptyContent?: ReactNode;
  // (undocumented)
  entities: T[];
  // (undocumented)
  tableOptions?: TableOptions;
  // (undocumented)
  title: string;
  // (undocumented)
  variant?: InfoCardVariants;
}

// @public
export class EntityTagFilter implements EntityFilter {
  constructor(values: string[]);
  // (undocumented)
  filterEntity(entity: Entity): boolean;
  // (undocumented)
  getCatalogFilters(): Record<string, string | string[]>;
  // (undocumented)
  toQueryValue(): string[];
  // (undocumented)
  readonly values: string[];
}

// @public (undocumented)
export const EntityTagPicker: (
  props: EntityTagPickerProps,
) => React_2.JSX.Element;

// @public (undocumented)
export type EntityTagPickerProps = {
  showCounts?: boolean;
};

// @public
export class EntityTextFilter implements EntityFilter {
  constructor(value: string);
  // (undocumented)
  filterEntity(entity: Entity): boolean;
  // (undocumented)
  getFullTextFilters(): {
    term: string;
    fields: string[];
  };
  // (undocumented)
  readonly value: string;
}

// @public
export class EntityTypeFilter implements EntityFilter {
  constructor(value: string | string[]);
  // (undocumented)
  getCatalogFilters(): Record<string, string | string[]>;
  // (undocumented)
  getTypes(): string[];
  // (undocumented)
  toQueryValue(): string[];
  // (undocumented)
  readonly value: string | string[];
}

// @public (undocumented)
export const EntityTypePicker: (
  props: EntityTypePickerProps,
) => React_2.JSX.Element | null;

// @public
export interface EntityTypePickerProps {
  // (undocumented)
  hidden?: boolean;
  // (undocumented)
  initialFilter?: string;
}

// @public (undocumented)
export class EntityUserFilter implements EntityFilter {
  // (undocumented)
  static all(): EntityUserFilter;
  // (undocumented)
  filterEntity(entity: Entity): boolean;
  // (undocumented)
  getCatalogFilters(): Record<string, string[]>;
  // (undocumented)
  static owned(ownershipEntityRefs: string[]): EntityUserFilter;
  // (undocumented)
  readonly refs?: string[] | undefined;
  // (undocumented)
  static starred(starredEntityRefs: string[]): EntityUserFilter;
  // (undocumented)
  toQueryValue(): string;
  // (undocumented)
  readonly value: UserListFilterKind;
}

// @public
export const FavoriteEntity: (
  props: FavoriteEntityProps,
) => React_2.JSX.Element;

// @public (undocumented)
export type FavoriteEntityProps = ComponentProps<typeof IconButton> & {
  entity: Entity;
};

// @public
export function getEntityRelations(
  entity: Entity | undefined,
  relationType: string,
  filter?: {
    kind: string;
  },
): CompoundEntityRef[];

// @public (undocumented)
export function getEntitySourceLocation(
  entity: Entity,
  scmIntegrationsApi: typeof scmIntegrationsApiRef.T,
): EntitySourceLocation | undefined;

// @public (undocumented)
export function humanizeEntityRef(
  entityRef: Entity | CompoundEntityRef,
  opts?: {
    defaultKind?: string;
    defaultNamespace?: string | false;
  },
): string;

// @public
export function InspectEntityDialog(props: {
  open: boolean;
  entity: Entity;
  onClose: () => void;
}): React_2.JSX.Element | null;

// @public
export function MissingAnnotationEmptyState(props: {
  annotation: string | string[];
  readMoreUrl?: string;
}): React_2.JSX.Element;

// @public (undocumented)
export type MissingAnnotationEmptyStateClassKey = 'code';

// @public (undocumented)
export function MockEntityListContextProvider<
  T extends DefaultEntityFilters = DefaultEntityFilters,
>(
  props: PropsWithChildren<{
    value?: Partial<EntityListContextProps<T>>;
  }>,
): React_2.JSX.Element;

// @public
export class MockStarredEntitiesApi implements StarredEntitiesApi {
  // (undocumented)
  starredEntitie$(): Observable<Set<string>>;
  // (undocumented)
  toggleStarred(entityRef: string): Promise<void>;
}

// @public
export interface StarredEntitiesApi {
  starredEntitie$(): Observable<Set<string>>;
  toggleStarred(entityRef: string): Promise<void>;
}

// @public
export const starredEntitiesApiRef: ApiRef<StarredEntitiesApi>;

// @public (undocumented)
export const UnregisterEntityDialog: (
  props: UnregisterEntityDialogProps,
) => React_2.JSX.Element;

// @public (undocumented)
export type UnregisterEntityDialogProps = {
  open: boolean;
  onConfirm: () => any;
  onClose: () => any;
  entity: Entity;
};

// @public
export function useAsyncEntity<
  TEntity extends Entity = Entity,
>(): EntityLoadingStatus<TEntity>;

// @public
export function useEntity<TEntity extends Entity = Entity>(): {
  entity: TEntity;
};

// @public
export function useEntityList<
  EntityFilters extends DefaultEntityFilters = DefaultEntityFilters,
>(): EntityListContextProps<EntityFilters>;

// @public
export function useEntityOwnership(): {
  loading: boolean;
  isOwnedEntity: (entity: Entity) => boolean;
};

// @public
export function useEntityPresentation(
  entityOrRef: Entity | CompoundEntityRef | string,
  context?: {
    defaultKind?: string;
    defaultNamespace?: string;
  },
): EntityRefPresentationSnapshot;

// @public
export function useEntityTypeFilter(): {
  loading: boolean;
  error?: Error;
  availableTypes: string[];
  selectedTypes: string[];
  setSelectedTypes: (types: string[]) => void;
};

// @public
export function useRelatedEntities(
  entity: Entity,
  relationFilter: {
    type?: string;
    kind?: string;
  },
): {
  entities: Entity[] | undefined;
  loading: boolean;
  error: Error | undefined;
};

// @public @deprecated
export class UserListFilter implements EntityFilter {
  constructor(
    value: UserListFilterKind,
    isOwnedEntity: (entity: Entity) => boolean,
    isStarredEntity: (entity: Entity) => boolean,
  );
  // (undocumented)
  filterEntity(entity: Entity): boolean;
  // (undocumented)
  readonly isOwnedEntity: (entity: Entity) => boolean;
  // (undocumented)
  readonly isStarredEntity: (entity: Entity) => boolean;
  // (undocumented)
  toQueryValue(): string;
  // (undocumented)
  readonly value: UserListFilterKind;
}

// @public (undocumented)
export type UserListFilterKind = 'owned' | 'starred' | 'all';

// @public (undocumented)
export const UserListPicker: (
  props: UserListPickerProps,
) => React_2.JSX.Element;

// @public (undocumented)
export type UserListPickerProps = {
  initialFilter?: UserListFilterKind;
  availableFilters?: UserListFilterKind[];
};

// @public (undocumented)
export function useStarredEntities(): {
  starredEntities: Set<string>;
  toggleStarredEntity: (
    entityOrRef: Entity | CompoundEntityRef | string,
  ) => void;
  isStarredEntity: (
    entityOrRef: Entity | CompoundEntityRef | string,
  ) => boolean;
};

// @public (undocumented)
export function useStarredEntity(
  entityOrRef: Entity | CompoundEntityRef | string,
): {
  toggleStarredEntity: () => void;
  isStarredEntity: boolean;
};
```
